#ifndef DATACOLLECTIONTHREAD_H
#define DATACOLLECTIONTHREAD_H

#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
#include <QtMath>

struct CPUData {
    double total;     // 总CPU使用率
    double user;      // 用户态CPU使用率
    double system;    // 系统态CPU使用率
    double idle;      // 空闲CPU使用率
    qint64 timestamp; // 时间戳
};

class DataCollectionThread : public QThread
{
    Q_OBJECT

public:
    explicit DataCollectionThread(QObject *parent = nullptr);
    ~DataCollectionThread();

    // 线程控制
    void stopThread();

    // 获取当前数据（线程安全）
    CPUData getCurrentData() const;

signals:
    // 数据更新信号
    void dataUpdated(CPUData data);

protected:
    // 线程的执行逻辑
    void run() override;

private:
    // 读取CPU统计数据
    CPUData readCPUStats();

    // 线程控制
    volatile bool stopFlag;
    mutable QMutex dataMutex;
    // 自动调用默认的初始化不用
    QWaitCondition waitCondition;

    // CPU数据
    CPUData currentData;

    // 用于计算CPU使用率的临时变量
    bool firstRead;
    unsigned long long lastUser;    // 上次用户态cpu时间
    unsigned long long lastSystem;  // 上次内核态cpu时间
    unsigned long long lastIdle;    // 上次空闲cpu时间
    unsigned long long lastTotal;   // 上次总cpu时间
};

#endif // DATACOLLECTIONTHREAD_H
